#!/bin/bash

# 统一前端管理脚本
# 用法:
#   ./frontend.sh dev           本机开发模式 (vite)
#   ./frontend.sh build         本机构建 (vite build)
#   ./frontend.sh preview       本机预览 (vite preview)
#   ./frontend.sh docker:build  构建前端镜像 (Dockerfile.standalone)
#   ./frontend.sh docker:up     使用 docker-compose-frontend-only.yml 启动
#   ./frontend.sh docker:down   停止并移除前端容器
#   ./frontend.sh docker:rebuild  重新构建镜像并启动

set -euo pipefail

ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
UI_DIR="$ROOT_DIR/ruoyi-ui"
COMPOSE_FILE="$ROOT_DIR/docker-compose-frontend-only.yml"
IMAGE_NAME="ruoyi/ruoyi-ui:1.4.0"

ensure_node() {
    if ! command -v node >/dev/null 2>&1; then
        echo "未检测到 node，请安装 Node.js >=20（或使用 docker:build/up）" >&2
        exit 1
    fi
    NODE_MAJOR=$(node -v | sed 's/^v//' | cut -d '.' -f1)
    if [ "$NODE_MAJOR" -lt 20 ]; then
        echo "当前 Node 版本不满足要求: $(node -v)，请使用 >=20（推荐 22 LTS），或改用 docker:build/up" >&2
        exit 1
    fi
}

ensure_docker() {
    if ! command -v docker >/dev/null 2>&1; then
        echo "未检测到 Docker，请先安装 Docker" >&2
        exit 1
    fi
}

ensure_compose() {
    if command -v docker compose >/dev/null 2>&1; then
        COMPOSE_CMD="docker compose"
    elif command -v docker-compose >/dev/null 2>&1; then
        COMPOSE_CMD="docker-compose"
    else
        echo "未检测到 Docker Compose，请安装 docker compose 或 docker-compose" >&2
        exit 1
    fi
}

case "${1:-}" in
    dev)
        ensure_node
        cd "$UI_DIR"
        npm config set registry https://registry.npmmirror.com
        npm install
        npm run dev
        ;;
    build)
        ensure_node
        cd "$UI_DIR"
        npm config set registry https://registry.npmmirror.com
        npm install
        npm run build
        ;;
    preview)
        ensure_node
        cd "$UI_DIR"
        npm run preview
        ;;
    docker:build)
        ensure_docker
        echo "使用 Node 容器构建前端产物..."
        docker run --rm \
          -v "$ROOT_DIR":/app \
          -w /app/ruoyi-ui \
          node:22 \
          sh -c "npm config set registry https://registry.npmmirror.com && npm install && npm run build"

        echo "构建前端镜像 $IMAGE_NAME..."
        cd "$UI_DIR"
        docker build -f Dockerfile.standalone -t "$IMAGE_NAME" .
        ;;
    docker:up)
        ensure_docker
        ensure_compose
        $COMPOSE_CMD -f "$COMPOSE_FILE" up -d
        $COMPOSE_CMD -f "$COMPOSE_FILE" ps
        ;;
    docker:down)
        ensure_docker
        ensure_compose
        $COMPOSE_CMD -f "$COMPOSE_FILE" down
        ;;
    docker:rebuild)
        "$0" docker:down || true
        "$0" docker:build
        "$0" docker:up
        ;;
    *)
        echo "用法: $0 {dev|build|preview|docker:build|docker:up|docker:down|docker:rebuild}" >&2
        exit 1
        ;;
esac


